컴퓨터과학
어셈블리_05_System V AMD64 ABI와 스택 프레임
작성자 : Heehyeon Yoo|2025-10-11
# Assembly# ABI# Calling Convention# Linux
협업이나 외부 라이브러리 활용을 위해서는 함수 호출 시 레지스터와 스택을 사용하는 규칙을 준수해야 한다. 리눅스 64비트 환경에서는 System V AMD64 ABI 표준을 따른다.
1. 함수 호출 규약(Calling Convention)
함수에 인자(Argument)를 전달할 때, 스택보다 속도가 빠른 레지스터를 우선적으로 사용한다. 인자 순서는 다음과 같다.
- RDI
- RSI
- RDX
- RCX
- R8
- R9
7번째 인자부터는 스택을 통해 전달한다. 이 순서를 지키지 않으면 함수가 엉뚱한 값을 참조하여 오작동하거나 종료된다.
2. 스택 프레임(Stack Frame)
함수 호출 시 생성되는 해당 함수만의 독립적인 작업 공간을 스택 프레임이라 한다. 스택 프레임은 프롤로그(Prologue)와 에필로그(Epilogue) 과정을 통해 생성 및 해제된다.
프롤로그(생성)
push rbp ; 이전 함수의 베이스 포인터(RBP) 백업
mov rbp, rsp ; 현재 스택 포인터(RSP)를 새로운 기준점(RBP)으로 설정
sub rsp, 0x10 ; 지역 변수 공간 확보
에필로그(해제)
leave ; RBP를 복구하고 스택 프레임 정리 (mov rsp, rbp + pop rbp)
ret ; 스택에 저장된 복귀 주소로 점프
최신 컴파일러는 최적화를 위해 RBP를 사용하지 않는 경우(Frame Pointer Omission)도 있으나, 기본적인 스택 관리 메커니즘은 동일하다.